perm filename MUSIO2.FAI[T,LCS] blob sn#017510 filedate 1972-12-21 generic text, type T, neo UTF8
COMMENT ⊗   VALID 00003 PAGES 
RECORD PAGE   DESCRIPTION
 00001 00001
 00002 00002	ENTRY C18.12,UDP.IN,UDP.OUT,UDP.ENTER,INTWRD
 00005 00003	EXTERNAL PROCEDURE UDP.INPUT(INTEGER CHANNEL REFERENCE INTEGER LOC
 00007 ENDMK
⊗;
ENTRY C18.12,UDP.IN,UDP.OUT,UDP.ENTER,INTWRD

	TITLE MUSIO2
;EXTERNAL PROCEDURE C18_12(INTEGER SCALING_FACTOR;INTEGER P_BUF_12);

	A←3
	B←1
	C←2
	MULCON←4
	P12←5
	P18←6
	T←7
	PC←10
	SP←16
	P←17

EXTERNAL GET.18,PUT.12,FINFLAG;

C18.12:	MOVE MULCON,-2(P)
	MOVE P12,-1(P)
	PUSHJ P,GET18
LOOP:	HLRE B,(P18)
	MUL B,MULCON
	ROTC C,14
	HRRE B,(P18)
	MUL B,MULCON
	ROTC C,14
MUMBLE:	AOBJP P18,[PUSH P,[.+1]
		 JRST GET18]
	HLRE B,(P18)
	MUL B,MULCON
	ROTC C,14
	MOVEM A,(P12)
	AOBJP P12,[PUSH P,[.+1]
		 JRST PUT12]
	HRRE B,(P18)
	MUL B,MULCON
	ROTC C,14
	AOBJP P18,[PUSH P,[.+1]
		 JRST GET18]
	HLRE B,(P18)
	MUL B,MULCON
	ROTC C,14
	HRRE B,(P18)
	MUL B,MULCON
	ROTC C,14
	MOVEM A,(P12)
	AOBJP P12,[PUSH P,[.+1]
		 JRST PUT12]
	AOBJP P18,[PUSH P,[LOOP]
		 JRST GET18]
	JRST LOOP

GET18:	PUSHJ P,SAVE
	PUSHJ P,GET.18
	MOVEM 1,ACSAVE+P18
	PUSHJ P,RESTORE
	JUMPL P18,CPOPJ
	MOVE T,[MOVEM A,(P12)]
	HRRZ PC,(P)		;GET WHERE IT WILL RETURN TO
FIN1:	CAIE PC,MUMBLE		;SKIP OVER LOSING CALL TO GET18!
	XCT (PC)		;EXECUTE UP TO WHERE IT WRITES SOMETHING
	AOS PC			;INTO BUFFER
	CAME T,-1(PC)
	JRST FIN1
	AOBJP P12,.+1
	PUSH P,P12
	PUSHJ P,PUT.12
FINISH:	SUB P,[XWD 4,4]
	JRST @3(P)

PUT12:	PUSHJ P,SAVE
	PUSH P,P12
	PUSHJ P,PUT.12
	MOVEM 1,ACSAVE+P12
RESTOR:	MOVSI ACSAVE
	BLT P18
	POPJ P,
SAVE:	MOVEI ACSAVE
	BLT ACSAVE+P18
CPOPJ:	POPJ P,

ACSAVE:	BLOCK 1+P18
;EXTERNAL PROCEDURE UDP.INPUT(INTEGER CHANNEL; REFERENCE INTEGER LOC;
;	INTEGER COUNT,BLOCK)
;EXTERNAL PROCEDURE UDP.OUTPUT(INTEGER CHANNEL; REFERENCE INTEGER LOC
;	INTEGER COUNT,BLOCK)
;EXTERNAL PROCEDURE UDP.ENTER(INTEGER CHANNEL; INTEGER PSWD;
;	 REFERENCE INTEGER EOF)

UDP.IN:	SKIPA 4,[INPUT 1]
UDP.OU:	MOVE 4,[OUTPUT 1]
	MOVE 2,-4(P)
	DPB 2,[POINT 4,4,12]
	MOVS 1,-2(P)
	SETCA 1,1
	ADD 1,-3(P)
	MOVE 2,-1(P)
	MOVE 3,[JRST UDP.RT]
	XCT 4
UDP.RT:	SUB P,[XWD 5,5]
	JRST @5(P)
UDP.EN:	MOVE 4,[ENTER 5]
	MOVE 5,-2(P)
	SETZB 6,7
	SETZ 10,
	MOVE 2,-3(P)
	DPB 2,[POINT 4,4,12]
	SETZM 1,@-1(P)
	XCT 4
	SETOM 1,@-1(P)			;FAILED!
	SUB P,[XWD 4,4]
	JRST @4(P)

INTWRD:	0
	END